{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 使用字符级RNN对姓名进行分类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 数据准备\n",
    "数据下载通道: 点击[这里](https://download.pytorch.org/tutorial/data.zip)下载数据集。解压到当前工作目录。\n",
    "\n",
    "在 `data/names` 文件夹下面包含18个名字形如 `[language].txt`的文件。每个文件包含多条姓名，一个姓名一行。我们在之后需要将其编码格式(Unicode)转化为ASCII。\n",
    "\n",
    "通过下面的步骤，我们可以得到一个数据字典，形如`{language:[name1,name2,...]}` ，字典的键为语言，值为一个列表，包含对应文件夹下面的所有姓名。用变量 `category` 和 `line` 分别标识键值对"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['data/names\\\\Arabic.txt', 'data/names\\\\Chinese.txt', 'data/names\\\\Czech.txt', 'data/names\\\\Dutch.txt', 'data/names\\\\English.txt', 'data/names\\\\French.txt', 'data/names\\\\German.txt', 'data/names\\\\Greek.txt', 'data/names\\\\Irish.txt', 'data/names\\\\Italian.txt', 'data/names\\\\Japanese.txt', 'data/names\\\\Korean.txt', 'data/names\\\\Polish.txt', 'data/names\\\\Portuguese.txt', 'data/names\\\\Russian.txt', 'data/names\\\\Scottish.txt', 'data/names\\\\Spanish.txt', 'data/names\\\\Vietnamese.txt']\n",
      "Slusarski\n"
     ]
    }
   ],
   "source": [
    "from __future__ import unicode_literals, print_function, division\n",
    "\n",
    "from io import open\n",
    "import glob\n",
    "import os\n",
    "\n",
    "def findFiles(path): return glob.glob(path)\n",
    "\n",
    "print(findFiles('data/names/*.txt'))\n",
    "\n",
    "import unicodedata\n",
    "import string\n",
    "\n",
    "all_letters = string.ascii_letters + \" .,;'\"\n",
    "n_letters = len(all_letters)\n",
    "\n",
    "# Turn a Unicode string to plain ASCII\n",
    "def unicodeToAscii(s):\n",
    "    return ''.join(\n",
    "        c for c in unicodedata.normalize('NFD', s)\n",
    "        if unicodedata.category(c)!= 'Mn'\n",
    "        and c in all_letters\n",
    "    )\n",
    "\n",
    "print(unicodeToAscii('Ślusàrski'))\n",
    "\n",
    "# Build the category_lines dictinary, a list of names per language\n",
    "category_lines={}\n",
    "all_categories = []\n",
    "\n",
    "# Read a file and split into lines\n",
    "def readLines(filename):\n",
    "    lines = open(filename, encoding='utf-8').read().strip().split('\\n')\n",
    "    return [unicodeToAscii(line) for line in lines]\n",
    "\n",
    "for filename in findFiles('data/names/*.txt'):\n",
    "    category = os.path.splitext(os.path.basename(filename))[0]\n",
    "    all_categories.append(category)\n",
    "    lines = readLines(filename)\n",
    "    category_lines[category] = lines\n",
    "\n",
    "n_categories = len(all_categories)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在我们有了`category_lines`, 这是一个字典映射了每个语言和对应的名字。我们同样记录了 `all_categories`(一个包含所有语言的列表)和 `n_categories` 方便后续的引用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Abandonato', 'Abatangelo', 'Abatantuono', 'Abate', 'Abategiovanni']\n"
     ]
    }
   ],
   "source": [
    "print(category_lines['Italian'][:5])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 将姓名转化为张量\n",
    "现在我们将所有的姓名组织好了，我们需要将他们转化为张量(Tensor)方便使用。  \n",
    "\n",
    "为了表示单个字母，我们使用 **one-hot** 表示方法(size:`<1 x n_letters>`) 。一个 one-hot 向量是全0(激活字母为1)的向量。 例如:\n",
    "`\"b\"=<0,1,0,0,0,...,0>`。\n",
    "\n",
    "于是每个姓名可以用形状为 `<line_length x 1 x n_letters>` 的 2D 矩阵表示。\n",
    "\n",
    "额外的一个维度是为了构建一个假的 batch(pytorch只接受mini_batch数据)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n",
      "          0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n",
      "          0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,\n",
      "          0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n",
      "          0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])\n",
      "torch.Size([5, 1, 57])\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "\n",
    "# Fine letter index from all_letters, e.g. \"a\"=0\n",
    "def letterToIndex(letter):\n",
    "    return all_letters.find(letter)\n",
    "\n",
    "# Just for demonstration, turn a letter into a <1 x n_letters> Tensor\n",
    "def letterToTensor(letter):\n",
    "    tensor = torch.zeros(1, n_letters)\n",
    "    tensor[0][letterToIndex(letter)]=1\n",
    "    return tensor\n",
    "\n",
    "# Turn a line into a <line_length x 1 x n_letters>,\n",
    "# or an array of one_hot letter vectors\n",
    "def lineToTensor(line):\n",
    "    tensor = torch.zeros(len(line), 1, n_letters)\n",
    "    for li, letter in enumerate(line):\n",
    "        tensor[li][0][letterToIndex(letter)]=1\n",
    "    return tensor\n",
    "\n",
    "print(letterToTensor('J'))\n",
    "print(lineToTensor('Jones').size())\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 构建网络\n",
    "在 `autograd` 出现前, 在Torch中创建一个循环神经网络需要在每一个时间步克隆层参数。网络层持有一个隐藏状态和梯度信息，而目前这些完全交由计算图本身来处理。这意味着你能自己用一个很纯净的方式来实现一个 RNN——仅仅使用一些常规的前馈层。\n",
    "\n",
    "这个RNN模块只有两个线性层，以输入和隐藏状态为输入，LogsSoftmax 层为输出。\n",
    "\n",
    "如下图所示：\n",
    "![](https://i.imgur.com/Z2xbySO.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import torch.nn as nn\n",
    "\n",
    "class RNN(nn.Module):\n",
    "    def __init__(self, input_size, hidden_size, output_size):\n",
    "        super(RNN, self).__init__()\n",
    "        \n",
    "        self.hidden_size = hidden_size\n",
    "        \n",
    "        self.i2h = nn.Linear(input_size + hidden_size, hidden_size)\n",
    "        self.i2o = nn.Linear(input_size + hidden_size, output_size)\n",
    "        self.softmax = nn.LogSoftmax(dim=1)\n",
    "        \n",
    "    def forward(self, input, hidden):\n",
    "        combined = torch.cat([input, hidden], 1)\n",
    "        hidden = self.i2h(combined)\n",
    "        output = self.i2o(combined)\n",
    "        output = self.softmax(output)\n",
    "        return output, hidden \n",
    "    \n",
    "    def initHidden(self):\n",
    "        return torch.zeros(1, self.hidden_size)\n",
    "    \n",
    "n_hidden = 128\n",
    "rnn = RNN(n_letters, n_hidden, n_categories)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了运行这个网络，我们需要传递输入和前一层传递下来的隐藏状态（初始化为0）。我们使用最后一层的输出作为预测的结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "input = letterToTensor('A')\n",
    "hidden = torch.zeros(1, n_hidden)\n",
    "\n",
    "output, next_hidden =  rnn(input, hidden)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了提高效率，我们不希望为每一步创建一个新的Tensor，因此我们将使用lineToTensor而不是letterToTensor并使用切片。这可以通过预先计算批量的Tensors进一步优化。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[-2.8338, -2.9645, -2.9535, -2.9355, -2.9281, -2.8521, -2.8352,\n",
      "         -2.9544, -2.8516, -2.8932, -2.7696, -2.8142, -2.8888, -2.7888,\n",
      "         -2.8991, -2.9971, -2.9783, -2.9278]])\n"
     ]
    }
   ],
   "source": [
    "input = lineToTensor('Albert')\n",
    "hidden = torch.zeros(1, n_hidden)\n",
    "\n",
    "output, next_hidden = rnn(input[0], hidden)\n",
    "print(output)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "正如你所看到的，输出是`<1 x n_categories>`的Tensor，其中每个项目都是该类别的可能性（越大代表可能性越高）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 训练\n",
    "### 4.1 训练准备\n",
    "在进入训练之前，我们应该做一些辅助函数。第一个是解释网络的输出，我们知道这是每个类别的可能性。这里使用Tensor.topk来获得最大值的索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('Japanese', 10)\n"
     ]
    }
   ],
   "source": [
    "def categoryFromOutput(output):\n",
    "    top_n, top_i = output.topk(1)\n",
    "    category_i = top_i[0].item()\n",
    "    return all_categories[category_i], category_i\n",
    "\n",
    "print(categoryFromOutput(output))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "同时我们还想快速获得一个训练样本（姓名及其所属语言）："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "category =  Czech / line = Morava\n",
      "category =  English / line = Linsby\n",
      "category =  Dutch / line = Agteren\n",
      "category =  Scottish / line = Mccallum\n",
      "category =  German / line = Laurenz\n",
      "category =  Chinese / line = Long\n",
      "category =  Italian / line = Pittaluga\n",
      "category =  Japanese / line = Sugitani\n",
      "category =  Portuguese / line = Duarte\n",
      "category =  French / line = Macon\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "\n",
    "def randomChoice(l):\n",
    "    return l[random.randint(0, len(l)-1)]\n",
    "\n",
    "def randomTrainingExample():\n",
    "    category = randomChoice(all_categories)\n",
    "    line = randomChoice(category_lines[category])\n",
    "    category_tensor = torch.tensor([all_categories.index(category)],dtype=torch.long)\n",
    "    line_tensor = lineToTensor(line)\n",
    "    return category, line, category_tensor, line_tensor\n",
    "\n",
    "for i in range(10):\n",
    "    category, line, category_tensor, line_tensor = randomTrainingExample()\n",
    "    print('category = ', category, '/ line =', line)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2 训练网络\n",
    "现在，训练这个网络所需要的只是展示一堆例子，让它做出猜测，然后告诉它是否错了。 \n",
    "\n",
    "对于损失函数的选择，`nn.NLLLoss`是合适的，因为RNN的最后一层是`nn.LogSoftmax`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "criterion = nn.NLLLoss()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "每个循环的训练做：\n",
    "\n",
    "- 创建输入和目标张量\n",
    "- 初始隐藏状态置0\n",
    "- 读取每个字母和\n",
    "    - 保持隐藏状态给下一个字母\n",
    "- 比较最终输出到目标\n",
    "- 反向传播\n",
    "- 返回输出和丢失"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "learning_rate = 0.005\n",
    "\n",
    "def train(category_tensor, line_tensor):\n",
    "    hidden = rnn.initHidden()\n",
    "    rnn.zero_grad()\n",
    "    \n",
    "    for i in range(line_tensor.size()[0]):\n",
    "        output,hidden = rnn(line_tensor[i],hidden)\n",
    "    \n",
    "    loss = criterion(output, category_tensor)\n",
    "    loss.backward()\n",
    "    \n",
    "    for p in rnn.parameters():\n",
    "        p.data.add_(-learning_rate, p.grad.data)\n",
    "        \n",
    "    return output, loss.item()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在我们只需要用一堆例子来运行它。由于训练函数同时返回输出和损失，我们可以打印其猜测并跟踪绘图的损失。由于有1000个示例，我们只打印每个print_every示例，并取平均损失。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000 5% (0m 9s) 2.2742 Bazovski / Polish ✗ (Russian)\n",
      "10000 10% (0m 17s) 2.8028 Rossum / Arabic ✗ (Dutch)\n",
      "15000 15% (0m 24s) 0.5319 Tsahalis / Greek ✓\n",
      "20000 20% (0m 32s) 1.9478 Ojeda / Spanish ✓\n",
      "25000 25% (0m 40s) 3.0673 Salomon / Russian ✗ (Polish)\n",
      "30000 30% (0m 47s) 1.7099 Hong / Chinese ✗ (Korean)\n",
      "35000 35% (0m 55s) 1.6736 Ruaidh / Irish ✓\n",
      "40000 40% (1m 3s) 0.0943 Cearbhall / Irish ✓\n",
      "45000 45% (1m 10s) 1.6163 Severin / Dutch ✗ (French)\n",
      "50000 50% (1m 18s) 0.1879 Horiatis / Greek ✓\n",
      "55000 55% (1m 26s) 0.0733 Eliopoulos / Greek ✓\n",
      "60000 60% (1m 34s) 0.8175 Pagani / Italian ✓\n",
      "65000 65% (1m 41s) 0.4049 Murphy / Scottish ✓\n",
      "70000 70% (1m 49s) 0.5367 Seo / Korean ✓\n",
      "75000 75% (1m 58s) 0.4234 Brzezicki / Polish ✓\n",
      "80000 80% (2m 6s) 0.8812 Ayugai / Japanese ✓\n",
      "85000 85% (2m 13s) 1.4328 Guirguis / Greek ✗ (Arabic)\n",
      "90000 90% (2m 21s) 0.3510 Dam / Vietnamese ✓\n",
      "95000 95% (2m 29s) 0.0634 Teunissen / Dutch ✓\n",
      "100000 100% (2m 37s) 0.4243 Laganas / Greek ✓\n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "import math\n",
    "\n",
    "n_iters = 100000\n",
    "print_every = 5000\n",
    "plot_every = 1000\n",
    "\n",
    "current_loss = 0\n",
    "all_losses = []\n",
    "\n",
    "def timeSince(since):\n",
    "    now = time.time()\n",
    "    s = now - since\n",
    "    m = math.floor(s/60)\n",
    "    s -= m*60\n",
    "    return '%dm %ds'%(m,s)\n",
    "\n",
    "start = time.time()\n",
    "\n",
    "for iter in range(1, n_iters+1):\n",
    "    category, line, category_tensor, line_tensor = randomTrainingExample()\n",
    "    output, loss = train(category_tensor, line_tensor)\n",
    "    current_loss+=loss\n",
    "    \n",
    "    if iter % print_every == 0:\n",
    "        guess, guess_i = categoryFromOutput(output)\n",
    "        correct = '✓' if guess == category else '✗ (%s)' % category\n",
    "        print('%d %d%% (%s) %.4f %s / %s %s' % (iter, iter / n_iters * 100, timeSince(start), loss, line, guess, correct))\n",
    "        \n",
    "    if iter%plot_every==0:\n",
    "        all_losses.append(current_loss / plot_every)\n",
    "        current_loss = 0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.3 可视化结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x2a7ed5dbb38>]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2a7ed54c9b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.ticker as ticker\n",
    "%matplotlib inline\n",
    "plt.figure()\n",
    "plt.plot(all_losses)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 评估模型\n",
    "为了了解网络在不同类别上的表现如何，我们将创建一个混淆矩阵，指示每个实际语言（行）网络猜测的哪种语言（列）。为了计算混淆矩阵，使用evaluate()通过网络运行一组样本."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2a7ee602c50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "confusion = torch.zeros(n_categories, n_categories)\n",
    "n_confusion = 10000\n",
    "\n",
    "def evaluate(line_tensor):\n",
    "    hidden = rnn.initHidden()\n",
    "    \n",
    "    for i in range(line_tensor.size()[0]):\n",
    "        output,hidden = rnn(line_tensor[i], hidden)\n",
    "    return output\n",
    "\n",
    "for i in range(n_confusion):\n",
    "    category, line, category_tensor, line_tensor = randomTrainingExample()\n",
    "    output = evaluate(line_tensor)\n",
    "    guess, guess_i = categoryFromOutput(output)\n",
    "    category_i = all_categories.index(category)\n",
    "    confusion[category_i][guess_i]+=1\n",
    "    \n",
    "for i in range(n_categories):\n",
    "    confusion[i]/=(confusion[i].sum())\n",
    "    \n",
    "fig = plt.figure()\n",
    "\n",
    "ax = fig.add_subplot(111)\n",
    "cax = ax.matshow(confusion.numpy())\n",
    "fig.colorbar(cax)\n",
    "\n",
    "ax.set_xticklabels(['']+all_categories,rotation=90)\n",
    "ax.set_yticklabels(['']+all_categories)\n",
    "\n",
    "ax.xaxis.set_major_locator(ticker.MultipleLocator(1))\n",
    "ax.yaxis.set_major_locator(ticker.MultipleLocator(1))\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "你可以从主轴上挑出明亮的点，它们可以显示出错误猜测的语言，例如：韩语猜测为汉语，意大利语猜测为西班牙语。希腊语的表现似乎很好，但是英语很差（可能是因为与其他语言的重叠较多）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda root]",
   "language": "python",
   "name": "conda-root-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
